package es.udc.acs.consorcio.sesion;

import java.util.ArrayList;

import es.udc.acs.database.operations.DBConsorcioOperations;
import es.udc.acs.utils.CodigosFAP;

public class TraficoDetenido extends SesionState{

	@Override
	public String sendMessage(ArrayList<Canal> canales, String question) {
		
		return CodigosFAP.CE_NO_EXISTE_SESION;
	}

	@Override
	public String receiveMessage(ArrayList<Canal> canales, int canal,
			int respuesta) {
		Canal c = canales.get(canal);
		
		if(c.obtenerNumMensaje() != respuesta){
			return CodigosFAP.CE_MSN_FUERA_SECUENCIA;
		}
		
		c.nuevaRespuesta();

		if(c.estaLibre()){
			return CodigosFAP.CE_CORRECTO;
		}
		return CodigosFAP.CE_MSN_FUERA_SECUENCIA;
	}

	@Override
	public boolean detenerTrafico(Sesion sesion) {
		return false;
	}

	@Override
	public boolean reanudarTrafico(Sesion sesion) {
		return sesion.setState(new RecibirMensajes());
	}

	@Override
	public boolean cierreSesion(Sesion sesion, ArrayList<Canal> canales, 
			String idBanco) {
		
		for(Canal c:canales){
			if(!c.estaLibre()){
				return false;
			}
		}
		if (GestorSesion.removeSesion(idBanco)) {
			try {
				DBConsorcioOperations.eliminarSesionConsorcio(idBanco);
			} catch (Exception e) {}
			return true;
		}
		return false;
	}

	@Override
	public boolean enRecuperacion(Sesion sesion) {
		return false;
	}

	@Override
	public boolean finRecuperacion(Sesion sesion) {
		return false;
	}

	@Override
	public String obtenerEstado() {
		return "Trafico detenido";
	}

	@Override
	public boolean recupera(Sesion sesion, ArrayList<Canal> canales) {
		return false;
	}

}
